#ifndef AI9_LOGIC_2017_LINK_H
#define AI9_LOGIC_2017_LINK_H

#include <Game/Game.h>
namespace skill {
    class Link : public Skill {
    public:
        Link() : Skill() {
            this->turn = LinkTurn;
            this->setName("Link");
        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };

    class Disconnect : public Skill {
    public:
        Disconnect() : Skill() {
            this->turn = LinkTurn;
            this->setName("Disconnect");
        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };

    class Connect : public Skill {
    public:
        Connect() : Skill() {
            this->turn = LinkTurn;
            this->setName("Connect");

        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;

    };

    class SetTransfer : public Automatic {
    public:
        SetTransfer() : Automatic() {
            this->turn = SetTransferTurn;
            this->setName("SetTransfer");
        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };

    class Transfer : public Skill {
    public:
        Transfer() : Skill() {
            this->turn = TransferTurn;
            this->setName("Transfer");
        }

        virtual bool canUse(Game *g, const std::vector<std::string> &params) override;

        virtual bool use(Game *g, const std::vector<std::string> &params) override;
    };
}

#endif //AI9_LOGIC_2017_LINK_H
